[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1 Der Queue-Handler PIPE:

In AmigaOS 2.04 wurde ein neuer Handler eingef�hrt, der es erlaubt, Daten zwischen verschiedenen Programmen auszutauschen. Dieser Handler hei�t ‘L:Queue-Handler’, ist aber besser als ‘PIPE:’ bekannt.

PIPE:’ implementiert eine echte, Unix-artige Pipe, mit der man die Standardausgabe eines Programms als Standardeingabe eines anderen Programms verwenden kann. Es ist auch m�glich, mehrere Programme �ber mehrere Pipes gleichzeitig zu verketten. Pipes brauchen weniger RAM f�r tempor�re Dateien, und der Zugriff ist schneller.

Allerdings unterscheidet sich ‘PIPE:’ von Unix-Pipes in zwei wesentlichen Punkten:

  1. Es handelt sich um ein Device; die Ein- und Ausgabe von Programmen mu� also nicht unbedingt eine Datei sein, obwohl das meistens der Fall ist. Man kann auch ‘PIPE:’ wie andere Devices verwenden, aber nat�rlich weder Directories lesen noch Seek-artige Zugriffe durchf�hren.
  2. Es gibt keine Flush-Operation. Wenn nicht alle Daten gelesen wurden, die in ‘PIPE:’ geschrieben wurden, dann bleiben sie stehen, bis sie evtl. von einem anderen Programm gelesen werden. Man mu� also Pipes immer leeren, bevor man sie schlie�t.
  3. Aus demselben Grund kann ein Programm blockiert werden, wenn es die interne Puffergr��e �berschreibt. Auch dies wird durch rechtzeitiges Leeren der Pipe vermieden.

Der Handlername von PIPE: ist vollst�ndig ‘PIPE:name/bufsize/bufnum’, wobei ‘name’ den verwendeten Pipekanal identifiziert und eindeutig sein sollte. Durch verschiedene Namen kann man also gleichzeitig mehrere Pipe-Kan�le �ffnen. Die optionalen Argumente bufsize und bufnum geben die Gr��e und Anzahl der verwendeten Datenpuffer an. Meist schreibt man einfach ‘PIPE:name’, die Vorgabegr��e ist dann 4096 Bytes und die Anzahl unbegrenzt.

Osma Ahvenlampi (Osma.Ahvenlampi@hut.fi)


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.1 Verwendung von PIPE: in einer AmigaShell

Zun�chst mu� ‘PIPE:’ nat�rlich mit Mount angemeldet sein. Dies kann durch das Kommando

    1> Mount PIPE:

in der Shell geschehen, ab AmigaOS 2.1 auch dadurch, da� man die Datei ‘PIPE’ nach ‘DEVS:DosDrivers’ schiebt.

In einem AmigaShell-Fenster kann man dann folgende Kommandos eingeben:

    1> Run List SYS: >PIPE:Listoutput
    1> More <PIPE:Listoutput

(1)

Diese beiden Kommandos erzeugen also zun�chst eine Liste der Dateien in ‘SYS:’ und geben diese dann mit Hilfe des More-Kommandos aus. Man k�nnte auch folgendes probieren:

    1> Run List SYS: NOHEAD >PIPE:Listoutput
    1> Run Sort PIPE:Listoutput PIPE:Sortedoutput
    1> More <PIPE:Sortedoutput

Dies w�rde also die Liste vor der Ausgabe noch sortieren.

Beachten Sie die Verwendung von Run au�er f�r das jeweils letzte Programm, durch die alle Programme gleichzeitig ablaufen. Man kann auch die Programme gleichzeitig in verschiedenen Shells ablaufen lassen.

Das Leeren der Pipe kann auch manuell geschehen, vorausgesetzt man kennt den Namen des verwendeten Kanals, indem man folgendes eingibt:

    1> Type PIPE:name TO NIL:

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.2 Das Pipe-Kommando

Im vorigen Beispiel ist die Verwendung von Pipes recht kompliziert, vor allem verglichen mit Unix-Pipes. Es gibt aber eine bessere M�glichkeit.

Andy Finkel, der fr�her bei Commodore gearbeitet hat, hat auch ein Kommando Pipe geschrieben (was man nicht mit ‘PIPE:’ verwechseln sollte!), das die Benutzung von Pipes stark vereinfacht. Ungl�cklicherweise wurde dieses Programm letzten Endes dann doch nicht in die offizielle Workbench aufgenommen, allerdings mit Billigung von Commodore ver�ffentlicht (Quellen: Fish-Disk 637, Aminet, ‘util/cli/finkelshelltools.lha’). Dieses Programm arbeitet auch unter OS3.1 noch problemlos.

Die Verwendung des Pipe-Kommandos ist einfach. Man �bergibt die auszuf�hrenden Programme als Argumente an Pipe, getrennt durch das Zeichen <|>, z.B.

    1> Pipe List SYS: | More
        oder
    1> Pipe List: SYS: NOHEAD | Sort IN: OUT: | More

Beachten Sie die Verwendung von ‘IN:’ und ‘OUT:’, die n�tig sind, weil das Sort-Kommando nicht von der Standardeingabe lesen und nicht auf die Standardausgabe schreiben kann. Diese Devices werden durch das Kommandos Pipe simuliert. Durch die Environment-Variable _pchar kann man auch ein anderes Zeichen anstelle von <|> verwenden.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.3 Das Pipe-Kommando in der AmigaShell

Es gibt ein sehr n�tzliches, allerdings undokumentiertes Feature der AmigaShell: Diese kennt das Pipe-Kommando! Ist die lokale Variable _pchar gesetzt, dann kann man Pipes sogar ohne Eingabe des Pipe-Kommandos benutzen. Die Shell erkennt das durch _pchar vorgegebene Zeichen und ruft f�r Kommandozeilen, die es enthalten, automatisch Pipe auf.

Am besten wird das folgende Kommando in ‘s:Shell-Startup’ eingetragen:

    1> Set _pchar "|"

(2) Man kann die vorigen Beispiele dann so ausf�hren:

    1> List SYS: | More
        oder
    1> List SYS: NOHEAD | Sort IN: OUT: | More

Dies entspricht also v�llig den Unix-Pipes.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.4 Die _mchar-Variable

Die lokale Variable _mchar legt das Zeichen fest, das als Kommandotrenner dient. Setzt man also

    1> Set _mchar ";"

dann kann man in der Shell die Befehle hintereinanderf�gen, durch den Strichpunkt getrennt.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.5 Bekannte Probleme

F:

Ich bekomme die Fehlermeldung

    PIPE: Unknown command

wenn ich das Kommando ‘List SYS: | More’ ausf�hre, obwohl ‘PIPE:’ mit Mount angemeldet ist. Was ist falsch?

A:

Die Shell sucht nach dem Kommando Pipe in der Fehlermeldung, nicht nach dem ‘PIPE:’-Device. Dieses Kommando ist also nicht im Suchpfad (meist in ‘C:’) installiert.

F:

Ein Requester meldet

    Please insert volume PIPE: in any drive

wenn ich eines der Kommandos aus den Beispielen ausf�hren will.

A:

PIPE:’ ist nicht angemeldet. Dies kann mit ‘Mount PIPE:’ geschehen.

F:

Wenn ich eines der Beispiele ausf�hre, dann er�ffnet das More-Kommando ein Fenster, aber dort erscheint nichts/ eine Fehlermeldung erscheint/ein Filerequester erscheint.

A:

Sie verwenden ein anderes More-Kommando als das aus der Workbench. Verwenden Sie einen anderen Namen oder installieren Sie ein More, das Pipes unterst�tzt, z.B. das More von Commodore, Less oder Most.


[Top] [Contents] [Index] [ ? ]

Footnotes

(1)

Dabei ‘1>’ der Prompt der AmigaShell, die eine Eingabe erwartet. Die Nummer kann nat�rlich variieren.

(2)

Die Anf�hrungsstriche sind wesentlich! Wenn _pchar bereits gesetzt ist, wird sonst angenommen, es handele sich bereits um einen Aufruf von Pipe. Dies kann etwa dann geschehen, wenn aus einer Shell eine neue gestartet wird.


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated on August 24, 2022 using texi2html 5.0.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ < ] Back Previous section in reading order 1.2.2
[ Up ] Up Up section 1.2
[ > ] Forward Next section in reading order 1.2.4
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated on August 24, 2022 using texi2html 5.0.